package myArrayList;

/**
 * @author : niu niu
 * @version : 1.0.0
 * @date : 2022/10/9 19:16
 *  自定义线性表（接口形式）
 *      1.元素类型 Long
 *          1) int 下标  long 元素
 *          2) 包装类，体现对象的形式而不是基础类型
 *      2.遵守线性表的规定
 *      3.体现： 有元素的位置： ！= null
 *              没有元素的位置： == null
 */
public interface MyList {

    int size();
    /**
     * 将e尾插都线性表中，一定返回为true
     * @param e
     * @return
     */
    boolean add(Long e);

    /**
     * 将e插入到线性表index位置，从[index,size()) 向后移
     * index的合法下表[0,size()]
     * 如果下标不合法：抛出一个 ArrayIndexOutOfBoundsException
     * @param index
     * @param e
     */
    void add(int index,Long e);

    /**
     *  删除 index 位置的元素
     *  index 的合法下标：[0, size())
     *  如果下标不合法：抛出一个 ArrayIndexOutOfBoundsException
     * @param index
     * @return
     */
    Long remove(int index);

    /**
     * 从前到后，删除第一个遇到的 e（ equals() == true）
     * @param e
     * @return
     */
    boolean remove(Long e);

    /**
     * 直接返回 index 位置的元素
     * @param index
     * @return
     */
    Long get(int index);

    /**
     * 使用e替换index的元素
     * @param index
     * @param e
     * @return
     */
    Long set(int index,Long e);

    /**
     * 从前往后 未找到返回-1
     * @param e
     * @return
     */
    int indexOf(Long e );

    /**
     * 从后往前，返回第一次遇到 e 的下标（equals() == true）
     * @param e
     * @return
     */
    int lastIndexOf(Long e);

    /**
     *      * 线性表中是否包含 e（equals）
     * @param e
     * @return
     */
    boolean contains(Long e);


    /**
     * 清空线性表
     */
    void clear();

    /**
     * 判断线性表是否是空的（empty） 等价于一个元素都没有
     * @return
     */
    boolean isEmpty();
}
